package com.ray.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.CombinationKeyBean;
import com.ray.bean.CompanyMaterialTableBean;
import com.ray.bean.OrderBean;
import com.ray.bean.ProcessBean;

/**
 * 配件工艺工序
 * @author natelu
 *
 */
public interface PartsProcedureMapper {

	/**
	 * 从订单明细中获取物料类型，从公司物料表中获取对应的物料名称和材质
     * 获取(物料类型，物料名称，物料材质)的公司物料
     * @param loginCompany(公司)
     * @author natelu
     * @return
     */
	List<CombinationKeyBean> getCompanyMaterial(Map map);

	/**
	 * 获取公司组合信息(不带工序)
	 * @param loginCompany(公司)
	 * @return
	 */
	List<CombinationKeyBean> getCombinationKey(Map map);
	int getCombinationKeyCount(Map map);

	/**
	  * 获取组合物料工序
	  * @param loginCompany(公司)
	  * @param combinationKeyList(组合list)
	  * @author natelu
	  * @return
	  */
	List<CombinationKeyBean> getMaterialProcedure(Map map);

	/**
	  * 获取部门下的工序
	  * @param loginCompany(公司)
	  * @param deptId(部门id)
	  * @param searchWhere(查询条件)
	  * @author natelu
	  * @return
	  */
	List<ProcessBean> getDeptProcedure(Map map);

	/**
	  * 添加新组合
	  * @param loginCompany(物料类型)
	  * @param materialType(物料类型)
	  * @param materialName(物料名称 可为空)
	  * @param materialQuality(材质 可为空)
	  * @param arts(工艺  可为空)
	  * @param id(Id)
	  * @param deptId(部门id)
	  * @author natelu
	  * @return
	  */
	void addCombination(Map map);

	/**
	  * 插入组合工序
	  * @param id(组合键)
	  * @param processList(工序集合 id sort)
	  * @author natelu
	  * @return
	  */
	void addCombinationProcedure(Map map);

	 /**
	  * 删除组合
	  * @param id
	  * @author natelu
	  * @return
	  */
	void deleteCombination(Map map);

	/**
	  * 通过id获取组合键
	  * @param id
	  * @author natelu
	  * @return
	  */
	CombinationKeyBean getCombinationKeyById(Map map);

	/**
	 * 获取组合键已有的id 
	 * @param(id 组合键id)
	 * @param map
	 * @return
	 */
	List<ProcessBean> getCombinationHave(Map map);

	/**
	 * 获取组合键未有的id
	 * @param id(组合键id)
	 * @param deptId(部门id)
	 * @return
	 */
	List<ProcessBean> getCombinationNoHave(Map map);

	/**
	 * 删除组合下的工序
	 * @param id（组合id）
	 */
	void deleteCombinationProcedure(Map map);

	/**
	  * 设置工序加工对象
	  * @param maching(加工对象)
	  * @param materialName(物料名称)
	  * @param materialQuality(材质)
	  * @param arts(工艺)
	  * @param combinationId(组合id)
	  * @param procedureId(工序id)
	  * @author natelu
	  * @return
	  */
	void setProcedureMaching(Map map);

	/**
	  * 设置组合顺序
	  * @param id(组合id)
	  * @param firstSort(第一顺序)
	  * @param secondSort(第二顺序)
	  * @param thirdSort(第三顺序)
	  * @author natelu
	  * @return
	  */
	void setCombinationSort(Map map);

	
	/**
	  * 获取订单物料组合工序
	  * @param orderId(订单编号)
	  * @param sort(排序字段)
	  * @author natelu
	  * @return
	  */
	List<CombinationKeyBean> getOrderMaterialProcedure(Map map);

	/**
	 * 通过订单编号获取有没有生成过
	 * @param orderId(订单编号)
	 * @return
	 */
	List<String> getAleradyOrderByOrderId(Map map);

	/**
	 * 保存订单工序
	 * @param processList(工序集合)
	 * @param orderId(订单编号)
	 */
	void saveOrderMaterialProcedure(Map map);

	
	 /**
	  * 获取已保存的订单物料工序
	  * @param orderId(订单编号)
	  * @author natelu
	  * @return
	  */
	List<CombinationKeyBean> getAlreadySaveProcedure(Map map);

	 /**
	  * 获取已保存的订单物料工序
	  * @param loginCompany(登录人公司)
	  * @param serachWhere(查询条件)
	  * @author natelu
	  * @return
	  */
	List<CombinationKeyBean> getOneMaterial(Map map);

	/**
	 * 校验物料组合是否存在
	 * @param groupId(物料id组合)
	 * @return
	 */
	CombinationKeyBean getMaterialGroupByGroupId(@Param("groupId")String groupId);

	/**
	 * 添加多物料组合
	 * @param map
	 */
	void addManyMaterial(Map map);
	
	/**
	 * 查找组合物料工序
	 * @param map
	 * @return
	 */
	List<CombinationKeyBean> getManyMaterialProcedure(Map map);
	int getManyMaterialProcedureCount(Map map);

	/**
	 * 获取组合物料的id集合
	 * @param map
	 * @return
	 */
	List<String> getGruopIdList(Map map);

	/**
	 * 获取组合物料集合信息
	 * @param idArray
	 * @return
	 */
	List<CompanyMaterialTableBean> getMaterialDateilByIdArray(@Param("idArray")String[] idArray);

	/**
	 * 通过id获取多物料组合
	 * @param id
	 * @param map
	 * @return
	 */
	CombinationKeyBean getManyMaterialById(Map map);

	
	/**
	 * 获取多物料组合工序
	 * @param list
	 * @return
	 */
	List<CombinationKeyBean> getManyMaterialProcedureByGroupIdList(Map map);

	/**
	 * 删除多物料组合
	 * @param id
	 * @author natelu
	 * @return
	 */
	void deleteManyMaterialGroup(Map map);

	/**
	 * 根据前台传过来的参数查找订单编号
	 * @param map
	 * @return
	 */
	OrderBean getOrderByManyWhere(Map map);

	
	/**
	  * 校验组合是否存在
	  * @param loginCompany(物料类型)
	  * @param materialType(物料类型)
	  * @param materialName(物料名称)
	  * @param materialQuality(材质)
	  * @param arts(工艺)
	  * @param deptId(部门id)
	  * @author natelu
	  * @return
	  */
	List<CombinationKeyBean> checkCombination(Map map);

	/**
	 * 获取订单第一行物料
	 * @param orderId(订单编号)
	 * @return
	 */
	List<CombinationKeyBean> getOrderMaterialList(Map map);

	
	 /**
	  * 获取订单保存的物料类型已有工序
	  * @param orderId(订单编号)
	  * @param materialType(物料类型)
	  * @author natelu
	  * @return
	  */
	List<ProcessBean> getMaterialProcedureHave(Map map);

	/**
	 * 获取订单信息
	 * @param map
	 * @return
	 */
	OrderBean getOrder(Map map);

	/**
	 * 获取订单物料没有的工序
	 * @param orderId(订单编号)
	 * @param materialType(物料类型)
	 * @return
	 */
	List<ProcessBean> getMaterialProcedureNoHave(Map map);

	
	 /**
	  * 保存订单工序
	  * @param orderId(订单编号)
	  * @param materialType(物料类型)
	  * @author natelu
	  * @return
	  */
	void deleteMaterProcedure(Map map);

	/**
	 * 获取组合中没有的物料
	 * @param idArray
	 * @param loginCompany 
	 * @return
	 */
	List<CompanyMaterialTableBean> getNoHaveMaterialListByIdArray(Map map);

	/**
	 * 修改组合 id
	 * @param map
	 * @param id
	 * @param groupId
	 */
	void updateGroupId(Map map);

	/**
	 * 获取公司组合
	 * @param map
	 * @return
	 */
	List<String> getCompanyGroupId(Map map);

	/**
	 * 保存工序另存为的工序
	 * @param map
	 * @param beforeId(保存之前的id)
	 * @param id(新插入的id)
	 */
	void saveOtherCombinationProcedure(Map map);
	
	/**
	  * 获取订单物料采购和入库时间
	  * @param orderId(订单编号)
	  * @author natelu
	  * @return
	  */
	List<Map> getOrderMaterialParchaseAndInCountTime(Map map);

	/**
	 * 获取多物料组合需要的id
	 * @param materialType(物料类型)
	 * @param arts(工艺)
	 * @param map
	 * @return
	 */
	List<String> getManyNeedId(Map map);

	/**
	 * 删除工艺结构树
	 * orderId 订单编号
	 * @param map
	 */
	int deleteTree(Map map);

	/**
	 * 根据工艺结构树查询还有那些订单需要生产
	 * @param map
	 * @return
	 */
	List<OrderBean> getProcedureSurplusOrders(Map map);

	
	

	

	

}
